<?php

namespace Shahu\Common\common;

class DataCommon
{

    /**
     * 列表开始下标、页数、条数
     * @param array $data
     * @return array
     */
    public static function beginAndPageAndSize(array &$data = []): array
    {
        //默认值
        $page = $data['page'] ?? 1;
        $size = $data['size'] ?? 10;
        unset($data['page'], $data['size']);
        //计算begin和end
        list($begin, $end) = DataCommon::beginAndEnd($page, $size);

        return [$begin, $end, $page, $size];
    }


    /**
     * 计算开始下标和结束下标
     * @param int $page
     * @param int $size
     * @return array
     */
    public static function beginAndEnd(int $page = 1, int $size = 10): array
    {
        $index = max(intval(bcsub($page, 1, 0)), 0);
        //begin
        $begin = intval(bcmul($index, $size));
        //end
        $end = intval(bcadd($begin, $size));
        //返回
        return [$begin, $end];
    }


    /**
     * 分页数据
     * @param $page
     * @param $size
     * @param $count
     * @param $list
     * @return array
     */
    public static function standardOutput($page, $size, $count, $list): array
    {
        return [
            'page' => intval($page ?? 1),
            'size' => intval($size ?? 10),
            'count' => $count ?? 0,
            'list' => $list ?? []
        ];
    }


    /**
     * 将特定字段作为key，组合key-arr的map
     * @param array $arr
     * @param string $field
     * @return array
     */
    public static function concatKeyMap(array $arr = [], string $field = 'id'): array
    {
        $map = [];
        if (!empty($arr)) {
            //获取key数组
            $key_arr = array_column($arr, $field);
            if ($key_arr) {
                //combine
                $map = array_combine($key_arr, $arr);
            }
        }
        return $map;
    }

}
